// ================================================
// Builder.Alyr.Net 智能体代码规范检测工具
// 一键启动脚本
// (c) 2020-2025 ALYR.NET
// ================================================

const { execSync } = require('child_process');
const path = require('path');
const fs = require('fs');

// 设置终端标题
function setTerminalTitle() {
    try {
        if (process.platform === 'win32') {
            process.title = 'Builder.Alyr.Net - 智能开发环境';
            // 尝试设置控制台标题
            execSync('title Builder.Alyr.Net - 智能开发环境', { stdio: 'ignore' });
        }
    } catch (error) {
        // 忽略标题设置错误
    }
}

console.log('🚀 Builder.Alyr.Net 智能体代码规范检测工具');
console.log('项目: Builder.Alyr.Net');
console.log('=' .repeat(50));

// 设置终端标题
setTerminalTitle();

// 检查依赖
function checkDependencies() {
    console.log('📦 检查依赖...');
    try {
        const packagePath = path.join(__dirname, '..', 'config', 'package.json');
        const nodeModulesPath = path.join(__dirname, '..', 'node_modules');
        
        if (!fs.existsSync(packagePath)) {
            console.log('❌ 未找到 package.json，请先运行安装程序');
            return false;
        }
        
        if (!fs.existsSync(nodeModulesPath)) {
            console.log('📥 安装依赖中...');
            // 切换到config目录执行npm install
            const configDir = path.join(__dirname, '..', 'config');
            execSync('npm install', { stdio: 'inherit', cwd: configDir });
        }
        
        console.log('✅ 依赖检查完成');
        return true;
    } catch (error) {
        console.error('❌ 依赖检查失败:', error.message);
        return false;
    }
}

// 显示菜单
function showMenu() {
    console.log('\n🎯 请选择功能:');
    console.log('1. 启动实时代码监控');
    console.log('2. 运行代码规范检查');
    console.log('3. 自动修复代码问题');
    console.log('4. 系统健康检查');
    console.log('5. 查看帮助文档');
    console.log('6. 🚀 全部开启 (一键启动所有功能)');
    console.log('7. Git强制同步');
    console.log('0. 退出');
    console.log('-'.repeat(30));
}

// 执行功能
function executeFunction(choice) {
    const corePath = path.join(__dirname);  // 当前就在core目录中
    const utilsPath = path.join(__dirname, '..', 'utils');  // utils目录在上级目录
    
    try {
        switch (choice) {
            case '1':
                console.log('🔍 启动实时代码监控...');
                execSync(`node "${path.join(corePath, 'real-time-monitor.js')}"`, { stdio: 'inherit' });
                break;
                
            case '2':
                console.log('📋 运行代码规范检查...');
                execSync(`node "${path.join(corePath, 'ai-rules-checker.js')}"`, { stdio: 'inherit' });
                break;
                
            case '3':
                console.log('🔧 自动修复代码问题...');
                console.log('请使用: node core/fix-file.js <文件路径> <修复类型>');
                console.log('修复类型: naming | copyright | both');
                break;
                
            case '4':
                console.log('🏥 系统健康检查...');
                execSync(`node "${path.join(corePath, 'system-health-check.js')}"`, { stdio: 'inherit' });
                break;
                
            case '5':
                console.log('📚 查看帮助文档...');
                console.log('文档位置: docs/ 目录');
                console.log('主要文档:');
                console.log('- README.md: 主要说明');
                console.log('- docs/project_rules.md: 项目规范');
                console.log('- docs/SMART-INSTALL-GUIDE.md: 安装指南');
                break;
                
            case '6':
                console.log('🚀 全部开启 - 一键启动所有功能...');
                console.log('=' .repeat(50));
                
                // 1. 系统健康检查
                console.log('\n🏥 [1/4] 执行系统健康检查...');
                try {
                    execSync(`node "${path.join(corePath, 'system-health-check.js')}"`, { stdio: 'inherit' });
                    console.log('✅ 系统健康检查完成');
                } catch (error) {
                    console.log('⚠️ 系统健康检查出现问题，但继续执行其他功能');
                }
                
                // 2. 代码规范检查
                console.log('\n📋 [2/4] 执行代码规范检查...');
                try {
                    execSync(`node "${path.join(corePath, 'ai-rules-checker.js')}"`, { stdio: 'inherit' });
                    console.log('✅ 代码规范检查完成');
                } catch (error) {
                    console.log('⚠️ 代码规范检查出现问题，但继续执行其他功能');
                }
                
                // 3. 显示自动修复说明
                console.log('\n🔧 [3/4] 自动修复功能说明:');
                console.log('如需修复特定文件，请使用: node core/fix-file.js <文件路径> <修复类型>');
                console.log('修复类型: naming | copyright | both');
                
                // 4. 启动实时监控（后台运行）
                console.log('\n🔍 [4/4] 启动实时代码监控...');
                console.log('⚠️ 注意：实时监控将在后台持续运行');
                console.log('如需停止监控，请按 Ctrl+C');
                console.log('=' .repeat(50));
                console.log('🎉 所有功能已启动完成！');
                console.log('📊 实时监控正在运行中...');
                
                // 最后启动实时监控（这会阻塞进程）
                execSync(`node "${path.join(corePath, 'real-time-monitor.js')}"`, { stdio: 'inherit' });
                break;
                
            case '0':
                console.log('👋 再见！');
                process.exit(0);
                break;
                
            default:
                console.log('❌ 无效选择，请重新输入');
        }
    } catch (error) {
        console.error('❌ 执行失败:', error.message);
    }
}

// 主程序
function main() {
    if (!checkDependencies()) {
        process.exit(1);
    }
    
    // 交互式菜单
    const readline = require('readline');
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });
    
    function promptUser() {
        showMenu();
        rl.question('请输入选择 (0-6): ', (choice) => {
            executeFunction(choice.trim());
            
            if (choice.trim() !== '0') {
                console.log('\n按回车键继续...');
                rl.question('', () => {
                    promptUser();
                });
            } else {
                rl.close();
            }
        });
    }
    
    promptUser();
}

// 如果直接运行此文件
if (require.main === module) {
    main();
}

module.exports = { main, checkDependencies, executeFunction };